1.1.2Updated a month ago
import { Handlers, PageProps } from "$fresh/server.ts";
import { Package } from "$classes/package.ts";
import { ExtractPackageFileCodeProps, FileCode, PackageFileCodeProps } from "@components/package/files/Code.tsx";
import { ExtractFolderProps, PackageFolderBrowser, PackageFolderProps } from "@components/package/files/Folder.tsx";
import { ServeTyped } from "$utils/serve_ts.ts";

export const handler: Handlers<PackageFilePageProps, Viapak.Package.State> = {
  async GET(_req, ctx) {
    const { pathname } = ctx.url;
    const { _package } = ctx.state;

    const file = await ExtractPackageFileCodeProps(pathname, _package);
    const folder = ExtractFolderProps(pathname, _package);

    if(ctx.url.searchParams.get('direct') === 'true' && file ) {
      return ServeTyped(file.disk_path);
    }

    return ctx.render({ file, folder, package: ctx.state._package })
  }
}

interface PackageFilePageProps {
  file?: PackageFileCodeProps['file'] | null
  folder?: PackageFolderProps['folder'] | null
  package: Package
}

export default function PackageFilePage({ data: { file, folder, package: _package }}: PageProps<PackageFilePageProps>) {
  return (
    <div class="mt-12 flex">
      { file &&
        <FileCode file={file} package={_package} />
      }
      { folder &&
        <PackageFolderBrowser folder={folder} package={_package} />
      }
    </div>
  )
}